package com.unju.hibernate.patronDAO.imp;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import com.unju.hibernate.HibernateBase;
import com.unju.hibernate.entidades.Responsable;
import com.unju.hibernate.entidades.Usuario;
import com.unju.hibernate.patronDAO.PatronDAO;

public class ResponsableDAOImpl extends HibernateBase implements
		PatronDAO<Responsable> {

	final static Logger logger = Logger.getLogger(ResponsableDAOImpl.class);
	@Override
	public List<Responsable> getAll() {
		getSession().beginTransaction();
		List<Responsable> lista = getSession()
				.createCriteria(Responsable.class).list();
		getSession().getTransaction().commit();
		getSession().close();
		return lista;
	}

	@Override
	public Responsable get(Integer idDato) {
		getSession().beginTransaction();
		Responsable respons = (Responsable) getSession().get(Responsable.class,
				idDato);
		getSession().getTransaction().commit();
		getSession().close();
		return respons;
	}

	@Override
	public void insert(Responsable unDato) {
		getSession().beginTransaction();
		getSession().save(unDato);
		getSession().getTransaction().commit();
		getSession().close();
	}

	@Override
	public void update(Responsable unDato) {
		getSession().beginTransaction();
		getSession().update(unDato);
		getSession().getTransaction().commit();
		getSession().close();
	}

	@Override
	public void delete(Responsable unDato) {
		getSession().beginTransaction();
		getSession().delete(unDato);
		getSession().getTransaction().commit();
		getSession().close();
	}

	public Responsable checkDni(int dni){
		Responsable responsable = null;
		getSession().beginTransaction();
		Criteria criteria = getSession().createCriteria(Responsable.class);
		criteria.add(Restrictions.eq("dni", dni));
		if (criteria.list().size()>0)
			responsable = (Responsable) criteria.list().get(0);
		getSession().close();
		return responsable;
	}
	
	public Responsable findOneByName(String nombre){
		Responsable responsable = null;
		getSession().beginTransaction();
		Criteria criteria = getSession().createCriteria(Responsable.class);
		criteria.add(Restrictions.like("nombre", "%"+ nombre +"%"));
		if (criteria.list().size()>0)
			responsable = (Responsable) criteria.list().get(0);
		getSession().close();
		return responsable;
	}
	
	public ArrayList<Responsable> findByLastNameUser(String criterio) {
		logger.info("Criterio buscado: "+criterio);
		getSession().beginTransaction();
		Criteria criteria = getSession().createCriteria(Responsable.class);
        if(!criterio.isEmpty())
        	criteria.add(Restrictions.like("apellido", "%"+criterio+"%"));
        ArrayList<Responsable> lista = (ArrayList<Responsable>) criteria.list();
        getSession().getTransaction().commit();
        getSession().close();		
        return lista;		
	}
	public ArrayList<Responsable> findByName(String criterio) {
		getSession().beginTransaction();
		Criteria criteria = getSession().createCriteria(Responsable.class);
        if(!criterio.isEmpty())
        	criteria.add(Restrictions.like("nombre", "%"+criterio+"%"));
        ArrayList<Responsable> lista = (ArrayList<Responsable>) criteria.list();
        getSession().getTransaction().commit();
        getSession().close();		
        return lista;		
	}
	
	public ArrayList<Responsable> findByDni(int criterio) {
		getSession().beginTransaction();
		Criteria criteria = getSession().createCriteria(Responsable.class);
        if(criterio > 0)
        	criteria.add(Restrictions.like("dni", criterio));
        ArrayList<Responsable> lista = (ArrayList<Responsable>) criteria.list();
        getSession().getTransaction().commit();
        getSession().close();		
        return lista;		
	}
}
